Domain-driven design (DDD) è un approccio alla progettazione del software che punta a riprodurre a livello del software un dominio applicativo, basandosi sull'input degli esperti di quel dominio. Il DDD punta a suddividere i sistemi in contesti delimitati, ciascuno con il proprio modello, piuttosto che a progettare un singolo modello onnicomprensivo.
Seguendo i principi del domain-driven design la struttura e il linguaggio del software dovrebbero corrispondere alla struttura e al linguaggio del dominio. Ad esempio, in una software che si occupa di gestire una cantina vinicola possono esistere classi come "bottiglia" oppure "mosto" e metodi come "applica etichetta" oppure "imbottiglia".
I processi DDD si basano su tre principi cardine:
Il termine "Domain-driven design" è stato coniato da Eric Evans nel 2003 nel libro omonimo.[2]